<?
/**
 * 数据字典生成工具，
 * 最好有表注释，表中字段注释
 * 用于生成某个数据库下所有表的数据字典
 * 若表有注释，字段有注释更加。
 * 修改数据库信息，即可使用。
 *
 * 增加自己输入数据库相关信息功能
 * @author warlee
 * @version 1.1
 */

//最后版本信息
$version_info="last version power by warlee----最后更新2012.3.1 14:42";

session_start();
$action=$_GET['do'];
$db_config=$_COOKIE;
if (!$_COOKIE['database']){ //检测是否第一次登陆,否则填入默认数据	
	$db_config=array(
		'host'=>'localhost',	//主库域名
		'port'=>'3306',			//端　　口
		'user'=>'root',			//用户名　
		'password'=>'123',		//密　　码
		'database'=>'',			//数据库名
		'charset'=>'utf8'		//数据库编码
	);	
}

function now($nav){ //当前标签	
	if ($nav==$_GET['do']){		
		return 'class="this"';
	}
}

function conn_mysql() {	
	global $db_config;
	$db_conn=@mysql_connect(
		$db_config['host'].":".$db_config['port'],
		$db_config['user'],
		$db_config['password']
	);
	if(!$db_conn){//链接失败,记录链接失败状态				
		return 0;
	}
	else  
	{
		@mysql_select_db($db_config['database'],$db_conn);
		@mysql_query('set names '.$db_config['charset']);
		return 1;
	}
}

function goto_url($url){	
	echo '<html><body><script>window.location ="'.$url.'";</script></body></html>';
}


if($action=='submit_sql'){//表单接收处理
	if($_POST['table']=="" ||$_POST['info']=="" ){	
		$msg=urlencode('信息必须填写完整！');
		goto_url('?do=error&error='.$msg);
	}
	else { 	
		if (!conn_mysql()){ //链接失败,记录链接失败状态				
			$_SESSION['is_connect']="no";
			goto_url('?do=error&error='.'database error!!<hr/>'.mysql_error());
		}
		else{  					
			$_SESSION['is_connect']="yes";
			if (mysql_query('alter table '.$_POST['table'].' comment=\''.$_POST['info'].'\'')) {			
				$msg=urlencode('修改成功！');
				goto_url('?do=error&error='.$msg);
			}
			else {
				$msg=urlencode('修改失败！222');
				goto_url('?do=error&error='.$msg);
			}
		}
	}
}
if($action=='submit'){//表单接收处理
	if($_POST['host']=="" ||
		$_POST['port']=="" ||
		$_POST['user']=="" ||
		$_POST['password']=="" ||
		$_POST['database']=="" ||
		$_POST['charset']==""
		){	
		$msg=urlencode('信息必须填写完整！');
		goto_url('?do=error&error='.$msg);
	}
	else{  	
		setcookie('host',$_POST['host'], time()+3600);
		setcookie('port',$_POST['port'], time()+3600);
		setcookie('user',$_POST['user'], time()+3600);
		setcookie('password',$_POST['password'], time()+3600);
		setcookie('database',$_POST['database'], time()+3600);
		setcookie('charset',$_POST['charset'], time()+3600);
		$_SESSION['is_connect']="yes";//每填写一次，则默认将可链接性改为yes
		goto_url('?do=result');
	}
}

include('template/header.html');
			
if($action=='error'){//错误提示页面			
	echo '<div class="error"><div class="error_title">出错啦！</div><div class="error_content">';
	echo urldecode($_GET['error']);
	echo '<div><a href="?do=info">返回重新填写信息！</a></div>';
	echo '</div></div>';
}

if($action=='sql'){//数据库链接信息页面			
	if ($_SESSION['is_connect']=='yes'){
		echo '<div class="status_yes">数据库连接成功，可以直接点击 ‘查询结果’ 页面查看结果!</div>';
	}
	else{
		echo '<div class="status_no">数据库连接失败，请检查链接信息是否正确，修改信息再重试!</div>';
	}
	echo '<div class="db_info"><div class="info_title">输入数据库相关信息</div><div class="info_content">
	  <form method="POST" action="?do=submit_sql">
	  <div><span>数据库：</span><input type="text" name="table"/></div>
	  <div><span>注释：</span><input type="text" name="info" /></div>
	  <div><span>&nbsp;</span>
	  <input type="reset" value="重置" class="button" />
	  <input type="submit" value="提交" class="button" /></div>
	  <div style="clear:both"></div>
	  </form>
	  </div></div>';
}

if($action=='info' ||  $action==''){//数据库链接信息页面			
	if ($_SESSION['is_connect']=='yes'){
		echo '<div class="status_yes">数据库连接成功，可以直接点击 ‘查询结果’ 页面查看结果!</div>';
	}
	else{
		echo '<div class="status_no">数据库连接失败，请检查链接信息是否正确，修改信息再重试!</div>';
	}
	echo '<div class="db_info"><div class="info_title">输入数据库相关信息</div><div class="info_content">
		  <form method="POST" action="?do=submit">
		  <div><span>域名：</span><input type="text" name="host" value="'.$db_config['host'].'"/></div>
		  <div><span>端口：</span><input type="text" name="port" value="'.$db_config['port'].'"/></div>
		  <div><span>用户名：</span><input type="text" name="user" value="'.$db_config['user'].'"/></div>
		  <div><span>密码：</span><input type="password" name="password" value="'.$db_config['password'].'"/></div>
		  <div><span>数据库名：</span><input type="text" name="database" value="'.$db_config['database'].'"/></div>
		  <div><span>字符编码：</span><input type="text" name="charset" value="'.$db_config['charset'].'"/></div>
		  <div><span>&nbsp;</span>
		  <input type="reset" value="重置" class="button" />
		  <input type="submit" value="提交" class="button" /></div>
		  <div style="clear:both"></div>
		  </form>
		  </div></div>';
}
if($action=='result'){//结果页面			
	if($db_config['host']=="" ||
		$db_config['port']=="" ||
		$db_config['user']=="" ||
		$db_config['password']=="" ||
		$db_config['database']=="" ||
		$db_config['charset']==""
		){				
		$msg=urlencode('数据库链接信息必须填写完整！');
		goto_url('?do=error&error='.$msg);
	}				
	if($_SESSION['is_connect']=="no"){//检测链接状态,不可连接，则跳转到提示页面				
		$msg=urlencode('链接信息有误！');
		goto_url('?do=error&error='.$msg);
		die();
	}
	
	if (!conn_mysql()) //链接失败,记录链接失败状态	
	{	
		$_SESSION['is_connect']="no";
		goto_url('?do=error&error='.'database error!!<hr/>'.mysql_error());
	}
	else{  					
		$_SESSION['is_connect']="yes";
		$sql = "SHOW TABLE STATUS FROM ".$db_config['database'];
		$result = mysql_query($sql);
		if (!@mysql_fetch_assoc($result)){//没有该数据库						
			$_SESSION['is_connect']="no";
			goto_url('?do=error&error='.'database error!!<hr/>'.mysql_error());
		}
		while ($rows = @mysql_fetch_assoc($result)) {
			$array[] = $rows;
		} 
		$tables=count($array);
		//输出数据库表信息			
		echo '<div class="title">数据库表信息<span>(点击数据库表名即可查看该表的数据字段信息！)</span></div><span></span>
			<table class="tables"><tr class="head">
			<th>数据表</th>				
			<th>引擎</th>
			<th>条数</th>
			<th>大小</th>
			<th>创建时间</th>
			<th>更新时间</th>
			<th>表注释</th>						
			</tr>';
		for($i = 0;$i<$tables;$i++) {
			$comment=explode(';',$array[$i]['Comment']);
			echo'<tr class="'.($i%2==0?"even":"odd").'">
				 <td class="c1">'.($i + 1).'.<a href="#'.$array[$i]['Name'].'">'.$array[$i]['Name'].'</a>'.'</td>'.						
				'<td class="c2">'.$array[$i]['Engine'].'</td>'.			
				'<td class="c3">'.$array[$i]['Rows'].'</td>'.
				'<td class="c4">'.floor($array[$i]['Data_length']/1000).'KB</td>'.
				'<td class="c5">'.$array[$i]['Create_time'].'</td>'.
				'<td class="c6">'.$array[$i]['Update_time'].'</td>'.
				'<td class="c7">'.$comment[0].'</td>'.
				'</tr>';
		}
		echo '<tr class="bottom"><td colspan=7></td></tr></table>';

		//输出各个数据库表，字段信息
		for($i = 0;$i<$tables;$i++) {
			$comment=explode(';',$array[$i]['Comment']);
			echo '<a href="#top" class="go_to_top"><<返回</a><div class="title"><a name="'.$array[$i]['Name'].'"></a>';
			echo ($i + 1).'、数据表：'.$array[$i]['Name'].'<span>('.$comment[0].')</span></div>';

			//查询数据库字段信息
			$sql_tab = 'show full fields from '.$array[$i]['Name'];
			$tab_result = @mysql_query($sql_tab);
			$tab_array = array();
			while ($r = @mysql_fetch_assoc($tab_result)) {
				$tab_array[] = $r;
			} 
			//show 字段
			$keys_result = @mysql_query("show keys fro".$array[$i]['Name'], $db_conn);
			$arr_keys = @mysql_fetch_array($keys_result);
			echo '<table border="0">';
			echo '<tr class="head">
					<th class="t1">字段</th>
					<th class="t2">类型</th>
					<th class="t3">为空</th>
					<th class="t4"">字符集</th>									
					<th class="t5">额外</th>
					<th class="t6">默认值</th>													
					<th class="t7">字段注释</th>
					</tr>';
			for($j = 0;$j<count($tab_array);$j++) {
				$key_name = $arr_keys['Key_name'];
				if ($key_name = "PRIMARY") {
					$key_name = '主键('.$key_name.')';
				} 
				$key_field = $arr_keys['Column_name'];
				if ($tab_array[$j]['Field'] == $key_field) {
					$key_value = "PK";
				}
				else {
					$key_value = "";
				}
				echo '<tr class="'.($j%2==0?"even":"odd").'">';
				echo '<td class="t1">'.$tab_array[$j]['Field'].'</td>';
				echo '<td class="t2">'.$tab_array[$j]['Type'].'</td>';
				echo '<td class="t3">'.($key_value!=""?$key_value:$tab_array[$j]['Null']).'</td>';							
				echo '<td class="t4">'.$tab_array[$j]['Collation'].'</td>';								
				echo '<td class="t5">'.$tab_array[$j]['Extra'].'</td>';
				echo '<td class="t6">'.$tab_array[$j]['Default'].'</td>';											
				echo '<td class="t7">'.($key_value != ""?$key_name:$tab_array[$j]['Comment']).'</td>';
				echo '</tr>';
			}
			echo '<tr class="bottom"><td colspan=7></td></tr></table>';
		}
	}
}			
if($action=='about'){//关于页面			
	include('template/about.html');
}
include('template/footer.html');
?>